package com.taotao.decorate;

import com.alibaba.fastjson.JSONObject;
import com.taotao.entity.UserEntity;
import com.taotao.utils.JvmMapCacheUtils;
import com.taotao.utils.RedisUtil;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

/**
 * @Author: wangjin
 * @CreateTime: 2022-06-22  21:04
 */
@Component
public class RedisDecorate extends JvmComponentCache implements AbstractDecorate {
    //二级装饰缓存，装饰不改变原来的代码实现增强
    @Override
    public <T> T getCache(String key,Integer id) {
        //先查询一级缓存，一级缓存有数据直接返回
        UserEntity jvmUser= super.getCache(key,id);
        if(jvmUser !=null){
            return (T)jvmUser;
        }
        //查询二级缓存，二级缓存如果有就返回
        // 2.查询二级缓存 （走redis）
        String redisJson = RedisUtil.getString(key);
        if (!StringUtils.isEmpty(redisJson)) {
            UserEntity redisUser = JSONObject.parseObject(redisJson, UserEntity.class);
            // 需要将数据存放在 jvm内存中
            JvmMapCacheUtils.putEntity(key, redisUser);
            return  (T)redisUser;
        }

        return null;
    }
}
